/*
 * @lc app=leetcode.cn id=349 lang=javascript
 *
 * [349] 两个数组的交集
 */

// @lc code=start
/**
 * @param {number[]} nums1
 * @param {number[]} nums2
 * @return {number[]}
 */
// 排序 + 双指针
var intersection = function(nums1, nums2) {
  nums1.sort((a,b) => a - b)
  nums2.sort((a,b) => a - b)
  // 定义双指针
  let i = 0
  let j = 0
  let pre
  let res = []
  while(i < nums1.length && j < nums2.length) {
    // 如果两者相同,且不等于pre
    if (nums1[i] === nums2[j]) {
      if (nums1[i] !== pre) {
        res.push(nums1[i])
        pre = nums1[i]
      }
      i++
      j++
    } else {
      // 谁小谁++
      nums1[i] < nums2[j] ? i++ : j++
    }
  }
  return res
}
// @lc code=end

// hash表
// var intersection = function(nums1, nums2) {
//   let res = []
//   let set1 = new Set()
//   let set2 = new Set()
//   for (const item of nums1) {
//     if (!set1.has(item)) set1.add(item)
//   }
//   for (const item of nums2) {
//     if (set1.has(item) && !set2.has(item)) {
//       res.push(item)
//       set2.add(item)
//     }
//   }
//   return res
// };